package cn.tedu.egnotice1.controller;

import cn.tedu.egnotice1.base.response.JsonResult;
import cn.tedu.egnotice1.base.response.StatusCode;
import cn.tedu.egnotice1.mapper.NoticeMapper;
import cn.tedu.egnotice1.pojo.dto.NoticeAddParam;
import cn.tedu.egnotice1.pojo.dto.NoticeAddQuery;
import cn.tedu.egnotice1.pojo.entity.Notice;
import cn.tedu.egnotice1.pojo.vo.NoticeListVo;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;


@Slf4j
@RestController
@RequestMapping("/v1/notice")
public class NoticeController {

    @Autowired
    private NoticeMapper noticeMapper;



    //该方法映射到add路径的 POST 请求。
    //接收一个NoticeAddParam类型的请求体参数，这个参数包含了要添加通知的相关信息。
    //把NoticeAddParam对象的属性复制到Notice对象中。
    //设置Notice对象的updateTime和createTime为当前时间。
    //调用noticeMapper的add方法将Notice对象插入到数据库中。
    //根据插入操作的返回结果，返回相应的JsonResult对象。
    // 如果插入成功（返回值大于 0），则返回表示成功的JsonResult；
    // 否则返回表示操作失败的JsonResult。
    @PostMapping("add")
   public JsonResult add(@RequestBody NoticeAddParam noticeAddParam){

        log.debug("NoticeAddParam " + noticeAddParam);

        Notice notice = new Notice();
        BeanUtils.copyProperties(noticeAddParam,notice);
        notice.setUpdateTime(new Date());
        notice.setCreateTime(new Date());
        int i = noticeMapper.add(notice);
        if( i > 0){
            return JsonResult.ok();
        }else{
            return new JsonResult(StatusCode.OPEN_FAILED,null);
        }
    }


   //此方法被映射到 list 路径的 GET 请求，
   // 接收一个 NoticeAddQuery 对象作为参数，
   // 把查询日志记录下来，接着调用 noticeMapper 的 list 方法来获取通知列表，
   // 最后以 JsonResult 对象的形式返回查询结果。
    @GetMapping("list")
    public JsonResult list(NoticeAddQuery noticeAddQuery){
       log.debug("noticeAddQuery " + noticeAddQuery);
       List<NoticeListVo> noticeListVos = noticeMapper.list();


       return JsonResult.ok(noticeListVos);

   }

}
